home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Design
/
WB Collection.iso
/
datatypes
/
dfadt
/
source
/
dfadt_support.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-07
|
4KB
|
171 lines
#include "all_includes.h"
#include "dfadt.h"
LONG OFFSETS[] =
{
(int) & ((struct Address *)NULL)->as_Data.ad_Salutation >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_FirstName >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Name >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Street >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_CO >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_ZIP >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_City >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_State >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Country >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Birthday >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Phone >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Fax >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_EMail1 >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_EMail2 >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_EMail3 >> 2,
(int) & ((struct Address *)NULL)->as_Data.ad_Comment >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[0] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[1] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[2] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[3] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[4] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[5] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[6] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Groups[7] >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_Selected >> 2,
(int)&((struct Address *)NULL)->as_Data.ad_External
>> 2};
struct Address * __saveds dfadt_addnode
(
struct DDTData * dd
)
{
struct Address * tmp;
LONG size;
size = sizeof(struct Address);
if (tmp = (struct Address *)AllocPooled(dd->ddt_Pool, size))
{
tmp->as_Node.ln_Succ = NULL;
tmp->as_Node.ln_Pred = NULL;
tmp->as_Node.ln_Type = NT_UNKNOWN;
tmp->as_Node.ln_Pri = 0;
// Notice: The following line is not really needed,
// as we don't step through the list.
AddTail(&(dd->ddt_List),(struct Node*)tmp);
return(tmp);
}
return (NULL);
}
long __saveds dfadt_setentry
(
struct DDTData * dd,
struct Address * adr,
long id,
void * contents
)
{
char * item = NULL;
long err = 0L;
long slen = 0L;
switch (id)
{
case ITEMOFFSET_SALUTATION:
case ITEMOFFSET_FIRSTNAME:
case ITEMOFFSET_NAME:
case ITEMOFFSET_STREET:
case ITEMOFFSET_CO:
case ITEMOFFSET_ZIP:
case ITEMOFFSET_CITY:
case ITEMOFFSET_STATE:
case ITEMOFFSET_COUNTRY:
case ITEMOFFSET_BIRTHDAY:
case ITEMOFFSET_PHONE:
case ITEMOFFSET_FAX:
case ITEMOFFSET_EMAIL1:
case ITEMOFFSET_EMAIL2:
case ITEMOFFSET_EMAIL3:
case ITEMOFFSET_COMMENT:
case ITEMOFFSET_EXTERNAL:
item = ((char **)adr)[OFFSETS[id]];
if (contents && ( ((UBYTE *) contents)[0]))
{
if ( ((char **)adr)[OFFSETS[id]] )
{
if ( strcmp(((char **)adr)[OFFSETS[id]] , contents))
{
slen = strlen (((char **)adr)[OFFSETS[id]]) + 1;
FreePooled( dd->ddt_Pool, ((char **)adr)[OFFSETS[id]], slen);
slen = strlen ( contents ) + 1;
if (((char **)adr)[OFFSETS[id]] = AllocPooled ( dd->ddt_Pool, slen))
{
CopyMem(contents, ((char **)adr)[OFFSETS[id]], slen);
}
else
err = 10;
}
}
else
{
slen = strlen ( contents ) + 1;
if (((char **)adr)[OFFSETS[id]] = AllocPooled ( dd->ddt_Pool, slen))
{
CopyMem(contents, ((char **)adr)[OFFSETS[id]], slen);
}
else
err = 10;
}
}
else
{
if ( ((char **)adr)[OFFSETS[id]] )
{
slen = strlen (((char **)adr)[OFFSETS[id]]) + 1;
FreePooled( dd->ddt_Pool, ((char **)adr)[OFFSETS[id]], slen);
((char **)adr)[OFFSETS[id]] = NULL;
}
}
break;
/* -------------------------------------------------------------- */
case ITEMOFFSET_GROUP1:
case ITEMOFFSET_GROUP2:
case ITEMOFFSET_GROUP3:
case ITEMOFFSET_GROUP4:
case ITEMOFFSET_GROUP5:
case ITEMOFFSET_GROUP6:
case ITEMOFFSET_GROUP7:
case ITEMOFFSET_GROUP8:
case ITEMOFFSET_SELECTED:
item = (char * )(& ((char **)adr)[OFFSETS[id]]);
*((long *) item) = (LONG) contents;
break;
}
return(err);
}